package com.zhangh.summer.admin.support.aop.tx;

import com.zhangh.summer.admin.support.ds.common.MixedDS;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

/**
 * @description: 多数据源拦截器
 * @author: zhanghui  zhanghlucky@163.com
 * @create: 2021-03-19 22:48
 **/
@Slf4j
@Aspect
@Component
@Order(10)//优先Transactional 切面之前执行
public class MultiDsAspect {
    @Resource
    private MixedDS mixedDS;
    public MultiDsAspect() {

    }

    @Pointcut("@annotation(com.zhangh.summer.admin.support.aop.tx.MultiDs)")
    public void multiDsPointcut() {

    }

    @Before("multiDsPointcut() && @annotation(multiDs)")
    public void doBefore(JoinPoint joinPoint, MultiDs multiDs) {
        if (StringUtils.isNotBlank(multiDs.dsName())){
            log.debug("使用选定数据源 {}", multiDs.dsName());
            mixedDS.mysql().ds(multiDs.dsName());
        }else{
            log.debug("使用默认数据源 ");
            mixedDS.mysql().ds();
        }
        //普通数据源
        /*if (multiDs.value().getCode()== DsTypeEnum.DS.getCode()){
            if (StringUtils.isNotBlank(multiDs.dsName())){
                log.debug("使用选定数据源 {}",multiDs.dsName());
                mixedDS.mysql().ds(multiDs.dsName());
            }else{
                log.debug("使用默认数据源 ");
                mixedDS.mysql().ds();
            }

        }else {
            log.error("没有匹配的ds类型 :{} 数据源切换逻辑",multiDs.value().getCode());
        }*/
    }
}

